package my.mark.mybaibaoxiang.juc.biji02.lock;

import my.mark.mybaibaoxiang.juc.biji01.util.UnsafeInstance;
import sun.misc.Unsafe;

/**
 * 对象锁，区别于synchronized的，可跨方法的对象锁，lock。
 * java.util.concurrent.locks.ReentrantLock可重入锁，是一个jdk提供的，一般推荐使用这个。
 * new一个全局对象，通过UnsafeInstance.reflectGetUnsafe()的monitorEnter加锁，monitorExit解锁，是直接绕过jvm操作底层的，一般不推荐使用。
 */
public class ObjectMonitorTest {
    static Object object = new Object();

    public void method1(){//cdc
        UnsafeInstance.reflectGetUnsafe().monitorEnter(object);
    }

    public void method2(){
        UnsafeInstance.reflectGetUnsafe().monitorExit(object);
    }

    public static void main(String[] args) {

        /*synchronized (object){
        }*/
        Unsafe unsafe = UnsafeInstance.reflectGetUnsafe();

        unsafe.monitorEnter(object);
        //业务逻辑写在此处之间
        unsafe.monitorExit(object);

    }

}
